/**
 * 拍摄/获取图片
 * @param { Number } count 可选取的数量
 * @param { Array } sourceType 设备类型 (album 代表 相册；camera 代表 相机) 需要用数组形式传递
 * @param { String } sizeType 是否压缩图片['original' 原始, 'compressed' 压缩]
 */
export function chooseMedia({ count, sourceType, sizeType }) {
	return new Promise((resolve) => {
		let sizeTypeArr = [];
		sizeTypeArr.push(sizeType);
		wx.chooseMedia({
			count: count * 1 || 1, // (count * 1) 的作用是为了确保参数为数字
			mediaType: ['image'],
			sourceType: sourceType || ['album', 'camera'],
			maxDuration: 30,
			sizeType:sizeTypeArr,
			camera: 'back',
			success(res) {
				/**
				 * 获取图片地址 -> 循环图片地址数组 -> 通过photoToCanvas将图片转为canvas格式，实现缩略图 -> 使用promise.all 等待所有异步操作完成后返回出数据
				 */
				let tempFilePathList = [];
				const promises = [];
				res.tempFiles.forEach((item) => {
					const promise = filePathToBase64(item.tempFilePath).then(result => {
						// tempFilePathList.push({
						// 	thumbnail: result,
						// 	tempFilePath: item.tempFilePath
						// })
						tempFilePathList.push(result)
					});
					promises.push(promise);
				})

				// 使用 Promise.all 来等待所有异步操作完成
				Promise.all(promises).then(() => {
					// 所有异步操作完成后执行其他函数
					resolve({
						imageList: tempFilePathList
					})
				});
				// 上传文件
				// let url = 'https://www.haitaiint.com/file-ms-mpt/file/upload';
				// let tempFilePath = res.tempFiles[0].tempFilePath;
				// utils.uploadFile(url, httoken, tempFilePath, 'bucket1')
			},
			fail(error) {
				console.log('获取文件失败 ', error);
				wx.showToast({
					title: '获取文件失败',
					icon: 'error',
				})
				wx.navigateBack()
			}
		})
	})

	/**
	 * 将图片转为base64
	 * @param { string } tempFilePath 文件路径
	 */
	function filePathToBase64(tempFilePath){
		return new Promise(resolve=>{
			wx.getFileSystemManager().readFile({
				filePath: tempFilePath,
				encoding: 'base64',
				success: (res) => {
					// 获取base64编码的文件内容
					const base64Data = res.data;
					// 在这里可以使用base64Data进行相应的处理，比如上传到服务器等操作
					resolve('data:image/png;base64,' + base64Data);
				},
				fail: function (err) {
					console.error('读取文件失败:', err);
				}
			});
		})
	}

	/**
	 * 将图片转为canvas缩略图
	 * canvas缩略图是base64版本
	 * @param { String } tempFilePath 临时地址
	 */
	async function photoToCanvas(tempFilePath) {
		let width = 0;
		let height = 0;
		let imageres = await wx.getImageInfo({
			src:tempFilePath
		})
		console.log('图片大小',imageres);
		width = imageres.width * 0.3;
		height = imageres.height * 0.3;
		console.log('新的图片大小',width, height);
		// 创建离屏 2D canvas 实例
		const canvas = wx.createOffscreenCanvas({
			type: '2d',
			width: width,
			height: height
		})
		// 获取 context。注意这里必须要与创建时的 type 一致
		const context = canvas.getContext('2d')
		// 创建一个图片
		const image = canvas.createImage()
		// 等待图片加载
		await new Promise(resolve => {
			image.onload = resolve
			image.src = tempFilePath // 要加载的图片 url
		})
		// 把图片画到离屏 canvas 上
		context.clearRect(0, 0, width, height)
		context.drawImage(image, 0, 0, width, height)
		// 获取画完后的数据
		// const imgData = context.getImageData(0, 0, width, height)
		return canvas.toDataURL()
	}
}
